# -*- coding: utf-8 -*-

"""剑指 Offer II 072. 求平方根
给定一个非负整数 x ，计算并返回 x 的平方根，即实现 int sqrt(int x) 函数。
正数的平方根有两个，只输出其中的正数平方根。
如果平方根不是整数，输出只保留整数的部分，小数部分将被舍去。

示例 1:
输入: x = 4
输出: 2

示例 2:
输入: x = 8
输出: 2
解释: 8 的平方根是 2.82842...，由于小数部分将被舍去，所以返回 2

提示:
0 <= x <= 2^31 - 1"""


class Solution:
    """由题知，answer 一定为[0: x]之间的一个整数，可采用无限逼近的方法，怎么逼近呢？二分"""
    def mySqrt(self, x: int) -> int:
        if x in (0, 1):
            return x

        mini, maxi = 0, x
        while maxi-mini>1:
            midd = (mini+maxi)//2
            if midd**2 <= x:
                mini = midd
            else:
                maxi = midd
        return mini


if __name__ == '__main__':
    so = Solution()
    print(so.mySqrt(4))
    print(so.mySqrt(8))
